﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using BlueFinity.mvNET.CoreObjects;
using mvLibrary;
using mvLibrary.Helpers.Builders;
using mvLibrary.Helpers.Utils;
using mvLibrary.Helpers;

namespace fenk.Stock.Produccion
{
    public partial class MultiValeMontajes : BaseForm
    {
        private const int PRODUCTO_INDEX = 0;
        private const int CANTIDAD_INDEX = 2;
        private const int VALE_INDEX = 3;
        private const string SEPARADOR_ESPECIAL = "*";

        public IList<string[]> productos = new List<string[]>();

        public MultiValeMontajes()
        {
            InitializeComponent();
        }

        private void btnAgregarProducto_Click(object sender, EventArgs e)
        {
            // VALIDAMOS QUE TENGA COMPONENTES.
            UniItem.Replace(1, txtProduct.Text); //Producto
            UniItem.Replace(4, txtValeNumero.Text); // Vale

            CallProgram("CHECK.VALE.MONTAJE", 1, 1);
            if (SubErr == "1")
            {
                MessageBox.Show(ErrorMessage);
                CancelSaveItem = true;
            }
            else if (!string.IsNullOrEmpty(txtCantidad.Text) && !string.IsNullOrEmpty(txtValeNumero.Text))
            {

                var control = this.Controls.Find("txtProductLabel", true);
                txtProduct.DisplayLabel = control[0].Text;


                AddNewItemToListView();

                ClearFieldsAfterAdd();
            }
            else
            {
                MessageBox.Show(MessageUtils.GetCampoObligatorioMessage("Cantidad") + MessageUtils.GetCampoObligatorioMessage("Vale"));
            }
        }


        protected override void OnCancelItem()
        {
            this.txtCantidad.Text = string.Empty;
            this.lvwProductos.Items.Clear();
            this.productos.Clear();
        }
        public override void BeforeCreatePdf(ref string report)
        {
            PickReportFormatterBuilder reportFormatterBuilder = new PickReportFormatterBuilder(report);

            reportFormatterBuilder.RemoveInitialCLetterError();
            reportFormatterBuilder.RemoveEWAndFWError();
            report = reportFormatterBuilder.Build();
        }

        public override void BeforeSaveReport()
        {
            if (this.productos.Count <= 0)
            {
                MessageBox.Show("Debe agregar al menos 1 producto a la matriz");
                CancelSaveItem = true;
            }
            else
            {
                StringBuilder listaProductos = new StringBuilder();
                StringBuilder listaCantidades = new StringBuilder();
                StringBuilder listaVales = new StringBuilder();
                foreach (var producto in productos)
                {
                    listaProductos.Append(producto[PRODUCTO_INDEX]);
                    listaProductos.Append(SEPARADOR_ESPECIAL);
                    listaCantidades.Append(producto[CANTIDAD_INDEX]);
                    listaCantidades.Append(SEPARADOR_ESPECIAL);
                    listaVales.Append(producto[VALE_INDEX]);
                    listaVales.Append(SEPARADOR_ESPECIAL);

                }

                UniItem.Replace(1,listaProductos.ToString());
                UniItem.Replace(2, listaCantidades.ToString());
                UniItem.Replace(4, listaVales.ToString());

                CancelSaveItem = false;
            }
        }



        private void AddNewItemToListView()
        {
            string[] row = { txtProduct.Text, txtProduct.DisplayLabel, txtCantidad.Text, txtValeNumero.Text };
            productos.Add(row);
            var listViewItem = new ListViewItem(row);
            lvwProductos.Items.Add(listViewItem);
        }
        private void ClearFieldsAfterAdd()
        {
            this.txtProduct.Text = string.Empty;
            this.txtCantidad.Text = string.Empty;
            this.txtValeNumero.Text = string.Empty;
            this.txtProduct.Focus();
        }

    }
}
